package zsc.ruanc.practicaltraining.utils;

import com.rabbitmq.tools.json.JSONUtil;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import zsc.ruanc.practicaltraining.exception.ApiException;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * ip--->地址
 */
public class IPUtils {

    public static String address(String ip) {
        String address = null;
        try{
            address = address1(ip);
            return address;
        } catch (Exception e) {

        }

        try{
            address = address2(ip);
            return address;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "未知地址";
    }


    public static String address1(String ip){

        String url = "https://ip.51240.com/" + ip + "__ip/";

        OkHttpClient okHttpClient = new OkHttpClient(); // 创建OkHttpClient对象
        Request request = new Request.Builder().url(url).build(); // 创建一个请求
        try {
            Response response = okHttpClient.newCall(request).execute(); // 返回实体

            if (response.isSuccessful()) { // 判断是否成功
                /**获取返回的数据，可通过response.body().string()获取，默认返回的是utf-8格式；
                 * string()适用于获取小数据信息，如果返回的数据超过1M，建议使用stream()获取返回的数据，
                 * 因为string() 方法会将整个文档加载到内存中。*/
                String text = response.body().string();

                Pattern p = Pattern.compile("<td bgcolor=\"#FFFFFF\" style=\"text-align: center\">(.*?)<");
                Matcher m = p.matcher(text);
                while(m.find()) {
                    return m.group(1);
                }
                return "该IP没有对应的实际地址";

            }else {
                throw new ApiException(-1, "接口出错了");
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw new ApiException(-1, "接口出错了");
        }

    }


    public static String address2(String ip){

        String url = "https://www.123cha.com/ip/?q=" + ip;

        OkHttpClient okHttpClient = new OkHttpClient(); // 创建OkHttpClient对象
        Request request = new Request.Builder().url(url).build(); // 创建一个请求
        try {
            Response response = okHttpClient.newCall(request).execute(); // 返回实体

            if (response.isSuccessful()) { // 判断是否成功
                /**获取返回的数据，可通过response.body().string()获取，默认返回的是utf-8格式；
                 * string()适用于获取小数据信息，如果返回的数据超过1M，建议使用stream()获取返回的数据，
                 * 因为string() 方法会将整个文档加载到内存中。*/
                String text = response.body().string();

//                System.out.println(text);

                Pattern p = Pattern.compile("<td class=\"tg-btitle\">本站主数据：</td>\n" +
                        "    <td class=\"tg-data\">\n" +
                        "(.*?)    </td>");
                Matcher m = p.matcher(text);
                while(m.find()) {
                    return m.group(1);
                }
                return "该IP没有对应的实际地址";

            }else {
                throw new ApiException(-1, "接口出错了");
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw new ApiException(-1, "接口出错了");
        }

    }

}
